這裡是鐵匠史密斯,How is it going?
昨日知道如何旋轉玩家方向 fPlayerA
但是目前只使用常數 0.1f 來增加角度,是轉動得非常快的!
我們需要讓玩家旋轉方向的速度隨著影格刷新速率(frame rate)來調節
至今我們對遊戲世界的**方向定義是什麼呢? 我們直接上圖: **
對應整個座標系,並在 Day 13 | Ray Casting : 光如何前進? Part 2 進行調整後,得出:
Frame rate簡單來說就是影格速率 = fps (frame per second)
代表著: 電腦一秒可以顯示幾個影格(frame) [frame/ s]
這個單位相當於頻率,那週期呢? 我們先上圖:
假設電腦** 1 秒可以產生5個影格**,則
f = 5 [frame/ s] : ** 1 秒 可以產生多少影格?**T = 1 / f = 1 / 5 [s/frame] : 每走 1格影格 花了幾秒鐘?
那,這跟我們的旋轉角色方向的速率有什麼關係呢?
假設我們每個迴圈,都按著 A , 持續遞增 0.1 [rad] ,每個迴圈代表 1 frame,如果我們的電腦:1 秒能生成 5 個影格 (frame) -> f = 5 [frame/s]
代表玩家 1 秒內就轉了 0.1 [rad/frame]* 5[frame/s] = 0.5[rad / s]!
直接上計算圖:
那要如何避免呢? 我們可以利用 T = 1/f 的特性來讓旋轉速率下降,所以,我們可以另外乘上T 作為調節的參數(權重)使得新的旋轉角度速率為0.1 * 5 * T = 0.1 * 5 * 0.2 = 0.1 [rad]
無論 f = 5、60 或 1000,最終旋轉角度仍然約是 0.1 [rad/s] ,因為 T 會自動抵消 f 帶來的差異。
這樣的話,旋轉速率就不再被電腦的硬體效能(影格速率 f)所限制了
今日講解了旋轉角度的定義,明日直接上code來看看旋轉的速率吧~
繼續走下去~